// 云函数入口文件

const cloud = require('wx-server-sdk')

cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境

const db = cloud.database()



// 云函数入口函数

exports.main = async (event, context) => {

  const apiType = event.apiType

  const wxContext = cloud.getWXContext()

  let res = {code:0,msg:'',data:null}

  switch(apiType){



    case 'addUser':

      let name = event.name

      if(!name ){

        // 系统根据当前时间戳生成的16进制名称，比如用户_16DBG

        const hexTime = Date.now().toString(16).toUpperCase();

        name = `用户${hexTime}`;

      }

      const userData = {

        name: name,

        _openId: wxContext.OPENID,

        role: 'tenant' // 默认角色为房东

      }

      // 可选字段

      if(event.phone) userData.phone = event.phone

      if(event.idCard) userData.idCard = event.idCard

      if(event.address) userData.address = event.address

      await db.collection('user').add({

        data: userData

      })

      res = {

        code:200,

        msg:'添加用户成功',

        data:{

          name:name,

        }

      }

    break



    case 'updateUser':

      let updateData = {}

      if(event.name){

        // 对姓名进行正则验证，只能包含字母，中文，数字，且不多于16个字符

        const namePattern = /^[A-Za-z0-9\u4e00-\u9fa5]{1,16}$/;

        if (!namePattern.test(event.name)) {

          res = '名字不合规';

          break

        }

        updateData.name = event.name

      }

      // 电话验证：11位手机号

      if(event.phone){

        const phonePattern = /^1[3-9]\d{9}$/;

        if(!phonePattern.test(event.phone)){

          res = {

            code:0,

            msg:'手机号格式不合规',

            data:null

          }

          break

        }

        updateData.phone = event.phone

      }

      // 身份证号

      if(event.idCard){

        updateData.idCard = event.idCard

      }

      // 地址

      if(event.address){

        updateData.address = event.address

      }

      // 角色更新：只允许'landlord'/'tenant'

      if(event.role){

        const validRoles = ['landlord', 'tenant'];

        if(!validRoles.includes(event.role)){

          res = {

            code:0,

            msg:'角色不合规',

            data:null

          }

          break

        }

        updateData.role = event.role

      }





      await db.collection('user').where({

        _openId: wxContext.OPENID

      }).update({

        data: updateData

      })

      res = {

        code:200,

        msg:'更新用户成功',

        data:{

          name:event.name,

        }

      }

    break



    case 'getUserInfo':

      const user = await db.collection('user').where({

        _openId: wxContext.OPENID

      }).get()

      if(user.data.length === 0){

        res = {

          code:0,

          msg:'用户不存在',

          data:null

        }

        break

      }

      res = {

        code:200,

        msg:'获取用户信息成功',

        data:user.data[0]

      }

    break



    default:

      res = {

        code:0,

        msg:'没有对应的接口',

        data:null

      }

  }



  return {

    res

  }

}
